package com.example.kugou.common.music;


import com.example.kugou.common.fileUpload.FileUploadTool;
import com.example.kugou.commons.file.FindStringInTxt;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

//扫描音乐
public class FileUtils {


    /**
     * 判断是否是音乐
     * 之后将音乐存放到文件下
     * @param f
     * @return
     */
    public static List<Music> isMusic(File f) {
        List<Music> music = new LinkedList<>();
        File[] file = f.listFiles();
        Music music1 = new Music();
        if (file != null) {
            for (File file2 : file) {
                if (file2.isFile()) {
                    String s = file2.getPath();
                    if (s.endsWith("mp3")) {
//                       获取文件的名称，带有扩展名
                        String filename = MusicUtile.getfileName(s);
                        System.out.println(filename);
                        /**
                         * 需要存放文件的路径
                         */
                        String path = "G:\\小组项目\\网易云\\网易云\\163mHome\\audio";
                        /**
                         * 查看这个文件的名称在这个文件中是否存在
                         */
                        File newfiles = new File(path, filename);
                        System.out.println(newfiles.getAbsolutePath());
                        /**
                         * 如果不存在就创建文件
                         */
                        if (!newfiles.exists()) {
                            MusicUtile.createFile(path, filename);
                        }
                        /**
                         * 将文件复制到项目里面
                         */
                        String lrcName = filename.substring(0,filename.lastIndexOf("."));
//                        String lrcPath = get(f,lrcName);

//                        MusicUtile.copyFile(s, newfiles.getAbsolutePath());
                        try {
                            music1 = MusicUtile.getMusicInfo(s);
                            if (music1.getSongName() == null || music1.getSongName().equals("")) {
                                music1.setSongName(MusicUtile.getfileName(s));
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            music1 = new Music(MusicUtile.getfileName(s), "未命名", "", "未知年份", "没有描述");
                        }
                        Music music2 = MusicUtile.getName(lrcName,0);
                        if (music2 != null){
                            music1.setSongName(music2.getSongName());
                            music1.setArtist(music2.getArtist());
                        }
                        System.out.println(music1);
                        music1.setTotalTimeStr(FileUploadTool.getVideoDuration(newfiles));
                        music1.setMusicPath("audio" + File.separator + filename);
//                        music1.setLrcPath(lrcPath);
                        music.add(music1);
                    }
                } else {
                    music.addAll(isMusic(file2));
                }
            }
        }
        return music;
    }




    public static List<Mp3Info> getAllMuInfo(File f) {
        List<Mp3Info> mp3Infos = new LinkedList<>();
        File[] file = f.listFiles();
        Mp3Info mp3Info = new Mp3Info();
        if (file != null) {
            for (File file2 : file) {
                if (file2.isFile()) {
                    String s = file2.getPath();
                    if (s.endsWith("mp3")) {
//                       获取文件的名称，带有扩展名
                        String filename = MusicUtile.getfileName(s);
                        System.out.println(filename);
                        /**
                         * 需要存放文件的路径
                         */
                        String path = "E:\\小组项目\\网易云\\网易云\\Music.163-Web_wangyiyunyinyue\\audio";
                        /**
                         * 查看这个文件的名称在这个文件中是否存在
                         */
                        File newfiles = new File(path, filename);
                        System.out.println(newfiles.getAbsolutePath());
                        /**
                         * 如果不存在就创建文件
                         */
                        if (!newfiles.exists()) {
                            MusicUtile.createFile(path, filename);
                        }
                        /**
                         * 将文件复制到项目里面
                         */
                        String lrcName = filename.substring(0,filename.lastIndexOf("."));
//                        String lrcPath = get(f,lrcName);

//                        MusicUtile.copyFile(s, newfiles.getAbsolutePath());
                        try {
                            mp3Info = Mp3Info.getSongInfo(s);
                        } catch (Exception e) {
                            e.printStackTrace();
                            mp3Info.setSongName(MusicUtile.getfileName(s));
                        }
                        mp3Info.setMusicPath("audio" + File.separator + filename);
//                        mp3Info.setLrcPath(lrcPath);
                        mp3Infos.add(mp3Info);
                    }
                } else {
                    mp3Infos.addAll(getAllMuInfo(file2));
                }
            }
        }
        return mp3Infos;
    }


    /**
     * 获取某个文件夹下面的所有文件以及有多少个文件
     *
     * @param file
     */
    public static Map<String,List<String>> getGeci(File file,String findName) {
        Map<String,List<String>> map = new HashMap<>();
         try {
            //判断文件是否是文件，如果是文件，获取路径，并计数
            if (file.isFile()) {
                String s = file.getAbsolutePath();
                List<String> strings = FindStringInTxt.findStringInFile(file,findName);
                if(strings !=null && strings.size() > 0){
                    String filename = MusicUtile.getfileName(s);
                    System.out.println(filename);
                    map.put(filename,strings);
                }
            } else {
                //如果是文件夹，声明一个数组放文件夹和他的子文件
                File[] f = file.listFiles();
                //遍历文件件下的文件，并获取路径
                for (File file2 : f) {
                    map.putAll(getGeci(file2,findName));
                }
            }
        } catch (RuntimeException|IOException e) {
            e.printStackTrace();
        }
        return map;
    }

//测试扫描文件
//    public static void main(String[] args) {
//        //        这是扫描c盘的所有文件，可以修改
//        File file = new File("g:\\");
//        get(file);
//        System.out.println("文件个数为：" + n);
//
//    }



//    public static void main(String[] args) {
////        File file = new File("g:\\");
////        isMusic(file);
//        File file = new File("G:\\小组项目\\网易云\\网易云\\163mHome");
//        List<Music> music = null;
//        try {
//            music = FileUtils.isMusic(file);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        System.out.println(music);
//    }




//    public static void main(String args[]) {
//        delFolder("d:/test");
//        System.out.println("OK");
//    }




}